[3;38;2;249;38;114mclass[0m[38;2;166;226;46m [0m[4;38;2;102;217;239mRepeatedSubstring[0m
[38;2;166;226;46m  [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mfind_repeated_substring[0m[38;2;255;255;255m([0m[3;38;2;253;151;31ms[0m[38;2;255;255;255m)[0m
[38;2;248;248;242m    [0m[38;2;117;113;94m#[0m[38;2;117;113;94m catch the edge cases[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;230;219;116mNONE[0m[38;2;249;38;114m'[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m
[38;2;248;248;242m    [0m[38;2;117;113;94m#[0m[38;2;117;113;94m check if the string consists of only one character => "aaaaaa" => "a"[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m s[0m[38;2;248;248;242m.[0m[38;2;248;248;242msplit[0m[38;2;255;255;255m([0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242muniq[0m[38;2;248;248;242m[[0m[38;2;190;132;255m0[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s[0m[38;2;248;248;242m.[0m[38;2;248;248;242msplit[0m[38;2;255;255;255m([0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242muniq[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m

[38;2;248;248;242m    searched [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[38;2;248;248;242m][0m
[38;2;248;248;242m    longest_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255m0[0m
[38;2;248;248;242m    long_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m
[38;2;248;248;242m    [0m[38;2;255;255;255m([0m[38;2;190;132;255m0[0m[38;2;249;38;114m..[0m[38;2;248;248;242ms[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mi[0m[38;2;248;248;242m|[0m
[38;2;248;248;242m      [0m[38;2;249;38;114mnext[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m searched[0m[38;2;248;248;242m.[0m[38;2;102;217;239minclude?[0m[38;2;248;248;242m s[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m

[38;2;248;248;242m      searched[0m[38;2;248;248;242m.[0m[38;2;248;248;242mpush[0m[38;2;255;255;255m([0m[38;2;248;248;242ms[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;255;255;255m)[0m
[38;2;248;248;242m      next_occurrences [0m[38;2;249;38;114m=[0m[38;2;248;248;242m next_index[0m[38;2;255;255;255m([0m[38;2;248;248;242ms[0m[38;2;248;248;242m,[0m[38;2;248;248;242m i [0m[38;2;249;38;114m+[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m,[0m[38;2;248;248;242m s[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;255;255;255m)[0m
[38;2;248;248;242m      next_occurrences[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mnext_occurrence[0m[38;2;248;248;242m|[0m
[38;2;248;248;242m        [0m[38;2;249;38;114mnext[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m next_occurrence [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;249;38;114m-[0m[38;2;190;132;255m1[0m

[38;2;248;248;242m        prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m ge_prefix[0m[38;2;255;255;255m([0m[38;2;248;248;242ms[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;249;38;114m..[0m[38;2;248;248;242mnext_occurrence [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m][0m[38;2;248;248;242m,[0m[38;2;248;248;242m s[0m[38;2;248;248;242m[[0m[38;2;248;248;242mnext_occurrence[0m[38;2;249;38;114m..[0m[38;2;248;248;242ms[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;248;248;242m][0m[38;2;255;255;255m)[0m
[38;2;248;248;242m        [0m[38;2;249;38;114mif[0m[38;2;248;248;242m prefix[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength [0m[38;2;249;38;114m>[0m[38;2;248;248;242m longest_prefix[0m
[38;2;248;248;242m          longest_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m prefix[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m
[38;2;248;248;242m          long_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m prefix[0m
[38;2;248;248;242m        [0m[38;2;249;38;114mend[0m
[38;2;248;248;242m      [0m[38;2;249;38;114mend[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mend[0m
[38;2;248;248;242m    [0m[38;2;117;113;94m#[0m[38;2;117;113;94m if prefix == "       " it is a invalid sequence[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;230;219;116mNONE[0m[38;2;249;38;114m'[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m long_prefix[0m[38;2;248;248;242m.[0m[38;2;248;248;242mstrip[0m[38;2;248;248;242m.[0m[38;2;248;248;242mempty?[0m

[38;2;248;248;242m    long_prefix[0m
[38;2;248;248;242m  [0m[38;2;249;38;114mend[0m

[38;2;248;248;242m  [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mget_prefix[0m[38;2;255;255;255m([0m[3;38;2;253;151;31ms1[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31ms2[0m[38;2;255;255;255m)[0m
[38;2;248;248;242m    prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m
[38;2;248;248;242m    min_length [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[38;2;248;248;242ms1[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;248;248;242m,[0m[38;2;248;248;242m s2[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;248;248;242m][0m[38;2;248;248;242m.[0m[38;2;248;248;242mmin[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s1[0m[38;2;248;248;242m.[0m[38;2;102;217;239mnil?[0m[38;2;248;248;242m [0m[38;2;249;38;114m||[0m[38;2;248;248;242m s2[0m[38;2;248;248;242m.[0m[38;2;102;217;239mnil?[0m

[38;2;248;248;242m    [0m[38;2;255;255;255m([0m[38;2;190;132;255m0[0m[38;2;249;38;114m..[0m[38;2;248;248;242mmin_length [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mi[0m[38;2;248;248;242m|[0m
[38;2;248;248;242m      [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m prefix [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s1[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m s2[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m

[38;2;248;248;242m      prefix [0m[38;2;249;38;114m+=[0m[38;2;248;248;242m s1[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m
[38;2;248;248;242m    [0m[38;2;249;38;114mend[0m
[38;2;248;248;242m    prefix[0m
[38;2;248;248;242m  [0m[38;2;249;38;114mend[0m

[38;2;248;248;242m  [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mnext_index[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mseq[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mindex[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mvalue[0m[38;2;255;255;255m)[0m
[38;2;248;248;242m    indexes [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[38;2;248;248;242m][0m
[38;2;248;248;242m    [0m[38;2;255;255;255m([0m[38;2;102;217;239mindex[0m[38;2;249;38;114m..[0m[38;2;248;248;242mseq[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mi[0m[38;2;248;248;242m|[0m
[38;2;248;248;242m      indexes[0m[38;2;248;248;242m.[0m[38;2;248;248;242mpush[0m[38;2;255;255;255m([0m[38;2;248;248;242mi[0m[38;2;255;255;255m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m seq[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m value[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mend[0m
[38;2;248;248;242m    indexes[0m
[38;2;248;248;242m  [0m[38;2;249;38;114mend[0m

[38;2;248;248;242m  [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mfind_repeated_substring_file[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mfile_path[0m[38;2;255;255;255m)[0m
[38;2;248;248;242m    [0m[38;2;102;217;239mFile[0m[38;2;248;248;242m.[0m[38;2;102;217;239mopen[0m[38;2;255;255;255m([0m[38;2;248;248;242mfile_path[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242mread[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach_line[0m[38;2;248;248;242m.[0m[38;2;248;248;242mmap [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mline[0m[38;2;248;248;242m|[0m[38;2;248;248;242m find_repeated_substring[0m[38;2;255;255;255m([0m[38;2;248;248;242mline[0m[38;2;255;255;255m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m  [0m[38;2;249;38;114mend[0m
[38;2;249;38;114mend[0m
